//app.js
App({
  onLaunch: function () {
    
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        // env 参数说明：
        //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境（第一个创建的环境）
        // env: 'my-env-id',
        traceUser: true,
      })
    }

    this.globalData.sysinfo = wx.getSystemInfoSync()
    const updateManager = wx.getUpdateManager()
		    updateManager.onCheckForUpdate(function (res) {
		      // 请求完新版本信息的回调
		      console.log(res.hasUpdate)
		    })
		    updateManager.onUpdateReady(function () {
		      wx.showModal({
		        title: '更新提示',
		        content: '新版本已经准备好，是否重启应用？',
		        success: function (res) {
		          if (res.confirm) {
		            // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
		            updateManager.applyUpdate()
		          }
		        }
		      })
		    })
		    updateManager.onUpdateFailed(function () {
		      // 新的版本下载失败
		      wx.showModal({
		        title: '更新提示',
		        content: '新版本下载失败',
		        showCancel: false
		      })
		    })
  },


  globalData: {
    sysinfo: {},
    BluetoothState: false, // 蓝牙适配器状态
    connectState: false // 蓝牙连接状态
  },
  getModel: function () { //获取手机型号
    return this.globalData.sysinfo["model"]
  },
  getVersion: function () { //获取微信版本号
    return this.globalData.sysinfo["version"]
  },
  getSystem: function () { //获取操作系统版本
    return this.globalData.sysinfo["system"]
  },
  getPlatform: function () { //获取客户端平台
    return this.globalData.sysinfo["platform"]
  },
  getSDKVersion: function () { //获取客户端基础库版本
    return this.globalData.sysinfo["SDKVersion"]
  },
  buf2string: function (buffer) {
    var arr = Array.prototype.map.call(new Uint8Array(buffer), x => x)
    var str = ''
    for (var i = 0; i<arr.length; i++) {
    str += String.fromCharCode(arr[i])
  }
  return str
  },
  buf2hex: function (buffer) {
    return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
  },
  string2buf: function (str) {
    // 首先将字符串转为16进制
    let val = ""
    for (let i = 0; i < str.length; i++) {
      if (val === '') {
        val = str.charCodeAt(i).toString(16)
      } else {
        val += ',' + str.charCodeAt(i).toString(16)
      }
    }
    // 将16进制转化为ArrayBuffer
    return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function (h) {
      return parseInt(h, 16)
    })).buffer
  },
  /**
   * 字符串每20个字节分包返回数组
   */
  subPackage: function (str) {
    const packageArray = []
    for (let i = 0; str.length > i; i += 20) {
      packageArray.push(str.substr(i, 20))
    }
    return packageArray
  },

  //buff分包,20个一包
  getSendPackage:function(buff){
    const packageArray = []
    for(let i = 0; i<buff.byteLength;i+=20){
      if(i<buff.byteLength){
        packageArray.push(buff.slice(i,i+20))
      }else{
        packageArray.push(i,buff.byteLength)
        break
      }
    }
    return packageArray
  },

  /**
   * 停止搜索附近蓝牙
   */
  stopSearchDevs: function () {
    wx.stopBluetoothDevicesDiscovery({
      success: function (res) { },
    })
  },
  /**
   * 开始连接
   */
  startConnect(deviceId, deviceName = '未知设备') {
    if (this.globalData.BluetoothState) {
      wx.createBLEConnection({
        deviceId: deviceId,
        timeout: 10000, // 10s连接超时
        success: function (res) {
          wx.navigateTo({
            url: `/pages/service/service?deviceId=${deviceId}&deviceName=${deviceName}`,
          })
        },
      })
    }
  },
  /**
   * 断开连接
   */
  endConnect(deviceId) {
    if (this.globalData.BluetoothState) {
      wx.closeBLEConnection({
        deviceId: deviceId,
        success: function (res) {},
      })
    }
  },

/**
 * 检查微信本身是否有位置权限
 * 没有则弹出询问
 */
  getLocation:function(){
    console.log("检查位置..")
  wx.getSetting({
    success(res) {
      if (res.authSetting['scope.userLocation']) {
        wx.authorize({
          scope: 'scope.userLocation',
          success () {
            // 用户已经同意小程序使用录音功能，后续调用 wx.startRecord 接口不会弹窗询问
            console.log("获取成功？")
            wx.getLocation()
          },

          fail(){
            console.log("位置获取失败")
          }
        })

      }
    }
  })

  },



})
